﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AgileSaude.Entities;
using AgileSaude.Business;
using Uol.PagSeguro.Exception;
using Uol.PagSeguro.Domain;

namespace AgileSaude.Web.Compras
{
    public partial class ComprarExameResumo : PageBase
    {
        public MedicoEntities Medico
        {
            get { return (MedicoEntities)ViewState["Medico"]; }
            set { ViewState["Medico"] = value; }
        }

        public int IdMedico
        {
            get { return Convert.ToInt32(Session["IdMedico"]); }
            set { Session["IdMedico"] = value; }
        }

        public int IdTipoServico
        {
            get { return Convert.ToInt32(Session["IdTipoServico"]); }
            set { Session["IdTipoServico"] = value; }
        }

        public decimal ValorTotal
        {
            get { return Convert.ToDecimal(Session["ValorTotal"]); }
            set { Session["ValorTotal"] = value; }
        }

        public List<Servico_MedicoEntities> Servicos
        {
            get { return (List<Servico_MedicoEntities>)Session["Servicos"]; }
            set { Session["Servicos"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Resultado resultado = new Resultado();

                //if (Context.Handler is ComprarExame)
                //{
                //    int IdMedico = ((ComprarExame)Context.Handler).IdMedico;
                //    IdTipoServico = ((ComprarExame)Context.Handler).IdTipoServico;
                //    ValorTotal = ((ComprarExame)Context.Handler).ValorTotal;
                //    Servicos = ((ComprarExame)Context.Handler).Servicos;

                    if (IdMedico > 0)
                    {
                        Medico = new MedicoFacade().GetMedico(IdMedico);
                        if (Medico != null)
                        {
                            lblMedico.Text = "Clínica: " + Medico.Nome;
                            lblEndereco.Text = "Endereço: " + Medico.Endereco + ", " + Medico.Bairro + ", " + Medico.CidadeNome;
                            lblTelefone.Text = "Telefones: " + Medico.Telefone1 + " - " + Medico.Telefone2;
                            lblValor.Text = "Valor: " + String.Format("{0:0.00}", ValorTotal);
                        }
                        lblServicos.Text = "Exames:";
                        foreach (Servico_MedicoEntities servico in Servicos)
                        {
                            lblServicos.Text += "<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp" + servico.NomeServico;
                        }
                    }
                //}
            }
        }

        protected void btnPagar_Click(object sender, ImageClickEventArgs e)
        {
            Resultado resultado = new Resultado();

            if (chkPresente.Checked)
            {
                if (txtNome.Text == "")
                {
                    ((Label)Master.FindControl("lblMensagem")).Text = "Nome é requerido";
                    ((Label)Master.FindControl("lblMensagem")).CssClass = "failureNotification";
                    ((Label)Master.FindControl("lblMensagem")).Visible = true;
                    return;
                }
                if (txtCPF.Text == "")
                {
                    ((Label)Master.FindControl("lblMensagem")).Text = "CPF é requerido";
                    ((Label)Master.FindControl("lblMensagem")).CssClass = "failureNotification";
                    ((Label)Master.FindControl("lblMensagem")).Visible = true;
                    return;
                }
            }

            try
            {
                if (Medico != null)
                {
                    PedidoEntities pedido = new PedidoEntities();
                    pedido.Data = DateTime.Now;
                    pedido.idMedico = Medico.idMedico;
                    pedido.Medico = new MedicoFacade().GetMedico(pedido.idMedico);
                    pedido.idUsuario = getUsuarioLogado().idUsuario;
                    pedido.Usuario = new UsuarioFacade().GetUsuario(pedido.idUsuario);
                    //gerar número do pedido
                    pedido.Numero = long.Parse(DateTime.Now.ToString("yyMMddHHmmssffff")).ToString("X");
                    pedido.Status = "1";
                    pedido.transactionCode = "";
                    pedido.Voucher = "";

                    if (chkPresente.Checked)
                    {
                        pedido.PresenteNome = txtNome.Text;
                        pedido.PresenteCPF = txtCPF.Text;
                    }

                    int item = 0;
                    pedido.Servicos = new List<Pedido_ServicosEntities>();

                    foreach (Servico_MedicoEntities sm in Servicos)
                    {
                        item += 1;
                        Pedido_ServicosEntities pedItem = new Pedido_ServicosEntities();
                        pedItem.idServico = sm.idServico;
                        pedItem.Item = item;
                        pedItem.Valor = sm.PrecoVenda;
                        pedItem.PrecoCusto = sm.PrecoCusto;
                        pedido.Servicos.Add(pedItem);
                    }

                    pedido.AtualizaValorTotal();
                    pedido.AtualizaValorCustoTotal();

                    PagSeguroFacade pagseguro = new PagSeguroFacade(Server.MapPath("~/Configuration/PagSeguroConfig.xml"));

                    new PedidoFacade().Incluir(pedido);

                    pedido = new PedidoFacade().GetPedido(pedido.Numero);

                    Uri uri = pagseguro.RequisicaoPagto(pedido, ref resultado);

                    //DateTime DtFim = DateTime.Now;
                    //DateTime DtIni = DtFim.AddDays(-1);
                    //pedido.transactionCode = pagseguro.getTransactionCode(DtIni, DtFim, pedido.Numero);
                    //if (pedido.transactionCode != "")
                    //    new PedidoFacade().Alterar(pedido);

                    Response.Redirect(uri.ToString(), false);
                }

            }
            catch (PagSeguroServiceException exception)
            {
                string msg = "";

                foreach (ServiceError error in exception.Errors)
                {
                    msg += error.Message + ";";
                }

                ((Label)Master.FindControl("lblMensagem")).Text = msg;
                ((Label)Master.FindControl("lblMensagem")).CssClass = "failureNotification";
                ((Label)Master.FindControl("lblMensagem")).Visible = true;
            }
            catch (Exception ex)
            {
                new ResultadoFacade().GravaLog(ref resultado, ex.Message, "AgileSaude", "", "btnPagar_Click", "ComprarConsultaResumo.aspx");
                ((Label)Master.FindControl("lblMensagem")).Text = ex.Message;
                if (ex.InnerException != null)
                    ((Label)Master.FindControl("lblMensagem")).Text += " - " + ex.InnerException.Message;

                ((Label)Master.FindControl("lblMensagem")).CssClass = "failureNotification";
                ((Label)Master.FindControl("lblMensagem")).Visible = true;
            }
        }

        protected void chkPresente_CheckedChanged(object sender, EventArgs e)
        {
            txtNome.Enabled = chkPresente.Checked;
            txtCPF.Enabled = chkPresente.Checked;
        }
    }
}